package org.pidan.basic.designModel.prototype;

import java.util.ArrayList;

/**
 * {@code @description}:原型模式
 * 1、实现Cloneable接口在java语言有一个Cloneable接口，它的作用只有一个，就是在运行时通知；
 *    虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中，只有实现了这个接口 的类才可以被拷贝，
 *    否则在运行时会抛出CloneNotSupportedException异常。
 * 2、重写Object类中的clone方法Java中，所有类的父类都是Object类，Object类中有一个clone方法，作用是返回对象的一个拷贝，
 *    但是其作用域protected类型的，一般的类无法调用，因此 Prototype类需要将clone方法的作用域修改为public类型
 * {@code @author}: huangyuxin
 * {@code @date}: 2023-11-17
 */
public class Client {

    public static void main(String[] args) {

        //创建User原型对象
        User user1 = new User();
        user1.setName("皮蛋");
        user1.setPassword("1122345");
        ArrayList<String> phones = new ArrayList<>();
        phones.add("13000000000");
        user1.setPhones(phones);

        //copy一个user对象,并且对象的属性
        User user2 = user1.clone();
        user2.setPassword("2233456");

        //查看俩个对象是否是一个
        System.out.println(user1 == user2);

        //查看属性内容
        System.out.println(user1.getName() + " | " + user2.getName());
        System.out.println(user1.getPassword() + " | " + user2.getPassword());

        //查看对于引用类型拷贝
        System.out.println(user1.getPhones() == user2.getPhones());


    }
}
